package net.hands.common.ado.query;

import java.util.Collection;
import java.util.Iterator;

/**
 * 说明:数据查询接口 <br>
 * <p>
 * 这是一个开源的软件，请在LGPLv3下合法使用、修改或重新发布。
 * </p>
 * 
 * @author 陈侃(cknet@126.com, 13910090885)
 *         http://code.google.com/p/simpleframework/
 *         http://www.simpleframework.net
 */
public interface IDataQuery<E> extends Iterator<E> {

	/**
	 * 获取下一个可用的对象，null表示已没有可用的数据
	 * 
	 * @return
	 */
	E next();

	/**
	 * 当前游标的位置
	 * 
	 * @return
	 */
	int position();

	/**
	 * 说明:获得总数
	 * 
	 * @return int
	 * @update 2012-9-19 下午1:10:55
	 */
	int getCount();

	/**
	 * 说明:设置总数
	 * 
	 * @param count
	 *            总数
	 * @update 2012-9-19 下午1:11:08
	 */
	void setCount(int count);

	int getFetchSize();

	/**
	 * 表示一次从数据源获取对象到DataQuery中的数量
	 * 
	 * @param fetchSize
	 */
	IDataQuery<E> setFetchSize(int fetchSize);

	/**
	 * 说明:重置
	 * 
	 * @update 2012-9-19 下午1:15:12
	 */
	void reset();

	/**
	 * 说明:关闭
	 * 
	 * @update 2012-9-19 下午1:15:21
	 */
	void close();

	/**
	 * 说明:获得数据查询监听器集合
	 * 
	 * @return Collection<IDataQueryListener<T>>
	 * @update 2012-9-19 下午1:15:34
	 */
	Collection<IDataQueryListener> getListeners();

	/**
	 * 说明:添加数据查询监听器
	 * 
	 * @param listener
	 *            数据查询监听器
	 * @update 2012-9-19 下午1:15:53
	 */
	void addListener(IDataQueryListener listener);

	/**
	 * 说明:移除数据查询监听器
	 * 
	 * @param listener
	 *            诗句查询监听器
	 * @return boolean
	 * @update 2012-9-19 下午1:16:08
	 */
	boolean removeListener(IDataQueryListener listener);
}
